home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / FREENET / DEVOS / FDSOURCE.ARC / c / error < prev    next >
Text File  |  1996-02-12  |  1KB  |  71 lines

  1. #include <stdio.h>
  2. #ifdef MEMCHECK
  3. #  include "MemCheck.h"
  4. #else
  5. #  include <stdlib.h>
  6. #endif
  7. #include <string.h>
  8. #include <signal.h>
  9. #include <setjmp.h>
  10. #include "kernel.h"
  11.  
  12. #include "freedial.h"
  13. #include "error.h"
  14.  
  15. int line_no=0;
  16.  
  17. bool errbox(os_error *error, bool cancel)
  18. /* Pop up an error box
  19.  * IN  msg = error text
  20.  *     cancel = if !0 then make 'Cancel' button, otherwise only 'OK'
  21.  * OUT TRUE if user clicked 'OK' button
  22.  */
  23. {
  24. os_error err;
  25. /**/
  26. err.errnum=error->errnum;
  27. if (line_no!=0)
  28.    sprintf(err.errmess, "%s at script line %d", error->errmess, line_no);
  29.    else strcpy(err.errmess, error->errmess);
  30. return wimp_report_error(&err, cancel?3:1, APPNAME)==1;
  31. } /* errbox */
  32.  
  33. void complain(char *s, ...)
  34. {
  35. va_list ap;
  36. os_error error;
  37. /**/
  38. va_start(ap, s);
  39. error.errnum=0;
  40. vsprintf(error.errmess, s, ap);
  41. va_end(ap);
  42. errbox(&error, FALSE);
  43. } /* complain */
  44.  
  45. bool confirm(char *s, ...)
  46. {
  47. va_list ap;
  48. os_error error;
  49. /**/
  50. va_start(ap, s);
  51. error.errnum=0;
  52. vsprintf(error.errmess, s, ap);
  53. va_end(ap);
  54. return errbox(&error, TRUE);
  55. } /* confirm */
  56.  
  57. void handler(int sig)
  58. /* Error handling procedure
  59.  * Reports error, and quits program if user clicks 'Cancel'
  60.  */
  61. {
  62. extern jmp_buf on_error;
  63. /**/
  64. if (!errbox((os_error *)_kernel_last_oserror(), TRUE))
  65.    { /* clicked 'Cancel' - quit immediately */
  66.    wimp_close_down(my_handle);
  67.    exit(EXIT_FAILURE);
  68.    }
  69. longjmp(on_error, 1);
  70. } /* handler */
  71.